﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class CadastroBasicoVaga : RecruiterAccessHelper
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherTela();
            TraduzirWizard(wrdVaga);
        }

        private void PreencherTela()
        {
            var selecionador = SelecionadorLogado;
            txtSelecionador.Text = selecionador.Usuario.Pessoa.PessoaFisica.NomeCompleto;

            lsvBeneficio.DataSource = new Beneficio().SelecionarAtivos();
            lsvBeneficio.DataBind();
            
            PreencherEmpresas();
            PreencherFormaContratacao();
            PreencherArea();
            PreencherNivelProfissional();
        }

        private void PreencherEmpresas()
        {
            var empresas =
                (from empresa in EmpresasSelecionadorLogado
                 select new
                 {
                     empresa.Id,
                     Descricao = empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia
                 });

            WebHelper.FillDropDownList(ddlEmpresa, empresas, false);
        }

        private void PreencherArea()
        {
            List<Area> areas = new Area().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlArea, areas, true);
        }

        private void PreencherNivelProfissional()
        {
            List<NivelProfissional> niveisProfissionais = new NivelProfissional().SelectAllActive<NivelProfissional>();
            WebHelper.FillDropDownList(ddlNivelProfissional, niveisProfissionais, true);
        }

        private void PreencherFormaContratacao()
        {
            List<FormaContratacao> formaContratacoes = new FormaContratacao().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlFormaContratacao, formaContratacoes, false);
        }

        private void PreencherEspecializacaoArea()
        {
            if (ddlArea.SelectedValue.Equals("-1")) return;

            var especializacaoAreas = new EspecializacaoArea { IdArea = int.Parse(ddlArea.SelectedValue) }.SelecionarLista();
            WebHelper.FillDropDownList(ddlEspecializacaoArea, especializacaoAreas, true);
        }

        private void PreencherCargo()
        {
            if (ddlEspecializacaoArea.SelectedValue.Equals("-1")) return;

            var cargos = new Cargo { IdEspecializacaoArea = int.Parse(ddlEspecializacaoArea.SelectedValue) }.SelecionarLista();
            WebHelper.FillDropDownList(ddlCargo, cargos, true);
        }

        protected void ddlArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherEspecializacaoArea();
        }

        protected void ddlEspecializacaoArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherCargo();
        }

        protected void chkLocalizacao_CheckedChanged(object sender, EventArgs e)
        {
            pnlLocalizacao.Visible = !chkLocalizacao.Checked;
        }

        protected void lsvBeneficio_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var beneficio = (Beneficio)item.DataItem;

            var labelBeneficio = (Label)item.FindControl("lblBeneficio");
            var selecionado = (CheckBox)item.FindControl("chkSelecionado");

            labelBeneficio.Text = beneficio.Descricao;
            selecionado.Attributes.Add("Id", beneficio.Id.ToString());
        }

        protected void wrdVaga_FinishButtonClick(object sender, WizardNavigationEventArgs e)
        {
            Vaga vaga = SalvarVaga();
            SalvarBeneficio(vaga.Id);

            lnkRequisitos.PostBackUrl += vaga.Id;
        }

        private void SalvarBeneficio(int idVaga)
        {
            foreach (var item in lsvBeneficio.Items)
            {
                var check = (CheckBox) item.FindControl("chkSelecionado");

                if (check == null || !check.Checked) continue;

                var id = int.Parse(check.Attributes["Id"]);
                new VagaBeneficio {IdBeneficio = id, IdVaga = idVaga}.Save();
            }
        }

        private Vaga SalvarVaga()
        {
            var vaga = new Vaga
                           {
                               DataExpiracao = DateTime.Today.AddDays(90),
                               DataInclusao = DateTime.Now,
                               Descricao = txtDescricao.Text,
                               DivulgarDadosEmpresa = chkNaoInformarDados.Checked,
                               IdCargo = int.Parse(ddlCargo.SelectedValue),
                               IdFormaContratacao = int.Parse(ddlFormaContratacao.SelectedValue),
                               IdEmpresa = int.Parse(ddlEmpresa.SelectedValue),
                               IdNivelProfissional = int.Parse(ddlNivelProfissional.SelectedValue),
                               IdSelecionador = SelecionadorLogado.Id,
                               MesmaLocalizacaoEmpresa = chkLocalizacao.Checked,
                               Status = "A",
                               Valor = string.IsNullOrEmpty(txtValor.Text) ? (decimal?)null : Decimal.Parse(txtValor.Text),
                               ValorMinimo = string.IsNullOrEmpty(txtValorDe.Text) ? (decimal?)null : Decimal.Parse(txtValorDe.Text),
                               ValorMaximo = string.IsNullOrEmpty(txtValorAte.Text) ? (decimal?)null : Decimal.Parse(txtValorAte.Text)
                           };

            if (!chkLocalizacao.Checked)
                vaga.IdBairro = Endereco.Salvar(false).Bairro.Id;

            vaga.Save();
            return vaga;
        }
    }
}